/**
 * 检查玩家2001的教派信息脚本
 * 用于验证1000和1020指令返回教派信息缺失的问题
 */

const mysql = require('mysql2/promise');

// 数据库配置
const dbConfig = {
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: '123456',
    database: 'game_db'
};

class Player2001FactionChecker {
    constructor() {
        this.connection = null;
    }

    async connect() {
        try {
            this.connection = await mysql.createConnection(dbConfig);
            console.log('✅ 数据库连接成功');
        } catch (error) {
            console.error('❌ 数据库连接失败:', error.message);
            throw error;
        }
    }

    async disconnect() {
        if (this.connection) {
            await this.connection.end();
            console.log('🔌 数据库连接已关闭');
        }
    }

    // 检查玩家2001是否存在
    async checkPlayer2001() {
        try {
            const [rows] = await this.connection.execute(
                'SELECT id, name, lvl, roleType FROM characters WHERE id = ?',
                [2001]
            );

            if (rows.length === 0) {
                console.log('❌ 玩家2001不存在');
                return null;
            }

            console.log('✅ 玩家2001信息:');
            console.log(`   ID: ${rows[0].id}`);
            console.log(`   姓名: ${rows[0].name}`);
            console.log(`   等级: ${rows[0].lvl}`);
            console.log(`   职业: ${rows[0].roleType}`);
            return rows[0];
        } catch (error) {
            console.error('❌ 查询玩家2001失败:', error.message);
            return null;
        }
    }

    // 检查玩家2001的教派信息
    async checkPlayer2001Religion() {
        try {
            const [rows] = await this.connection.execute(
                'SELECT * FROM character_religions WHERE characterId = ?',
                [2001]
            );

            if (rows.length === 0) {
                console.log('❌ 玩家2001没有教派信息');
                return null;
            }

            console.log('✅ 玩家2001教派信息:');
            console.log(`   教派ID: ${rows[0].id}`);
            console.log(`   教派名称: ${rows[0].name}`);
            console.log(`   教派描述: ${rows[0].description || '无'}`);
            console.log(`   教派等级: ${rows[0].level}`);
            console.log(`   加入时间: ${rows[0].joinedAt}`);
            return rows[0];
        } catch (error) {
            console.error('❌ 查询玩家2001教派信息失败:', error.message);
            return null;
        }
    }

    // 检查所有有教派信息的玩家
    async checkAllReligions() {
        try {
            const [rows] = await this.connection.execute(
                'SELECT cr.*, c.name as characterName FROM character_religions cr LEFT JOIN characters c ON cr.characterId = c.id ORDER BY cr.characterId'
            );

            console.log(`📊 数据库中共有 ${rows.length} 个玩家有教派信息:`);
            rows.forEach((row, index) => {
                console.log(`   ${index + 1}. 玩家ID: ${row.characterId}, 姓名: ${row.characterName}, 教派: ${row.name}`);
            });

            return rows;
        } catch (error) {
            console.error('❌ 查询所有教派信息失败:', error.message);
            return [];
        }
    }

    // 检查character_religions表结构
    async checkTableStructure() {
        try {
            const [rows] = await this.connection.execute(
                'DESCRIBE character_religions'
            );

            console.log('📋 character_religions表结构:');
            rows.forEach(row => {
                console.log(`   ${row.Field}: ${row.Type} ${row.Null === 'NO' ? 'NOT NULL' : 'NULL'} ${row.Key ? `(${row.Key})` : ''} ${row.Default ? `DEFAULT ${row.Default}` : ''}`);
            });

            return rows;
        } catch (error) {
            console.error('❌ 查询表结构失败:', error.message);
            return [];
        }
    }

    // 为玩家2001创建测试教派数据
    async createTestReligionForPlayer2001() {
        try {
            // 先检查是否已有教派信息
            const existing = await this.checkPlayer2001Religion();
            if (existing) {
                console.log('⚠️ 玩家2001已有教派信息，跳过创建');
                return existing;
            }

            // 创建测试教派数据
            const [result] = await this.connection.execute(
                'INSERT INTO character_religions (characterId, name, description, level, joinedAt, updatedAt) VALUES (?, ?, ?, ?, NOW(), NOW())',
                [2001, '测试教派', '这是一个测试教派', 1]
            );

            console.log('✅ 为玩家2001创建测试教派数据成功');
            console.log(`   插入ID: ${result.insertId}`);

            // 重新查询验证
            return await this.checkPlayer2001Religion();
        } catch (error) {
            console.error('❌ 创建测试教派数据失败:', error.message);
            return null;
        }
    }

    // 运行完整检查
    async runCheck() {
        console.log('🔍 开始检查玩家2001的教派信息...\n');

        try {
            await this.connect();

            // 1. 检查表结构
            console.log('1️⃣ 检查character_religions表结构:');
            await this.checkTableStructure();
            console.log('');

            // 2. 检查玩家2001是否存在
            console.log('2️⃣ 检查玩家2001是否存在:');
            const player = await this.checkPlayer2001();
            console.log('');

            if (!player) {
                console.log('❌ 玩家2001不存在，无法继续检查');
                return;
            }

            // 3. 检查玩家2001的教派信息
            console.log('3️⃣ 检查玩家2001的教派信息:');
            let religion = await this.checkPlayer2001Religion();
            console.log('');

            // 4. 如果没有教派信息，创建测试数据
            if (!religion) {
                console.log('4️⃣ 为玩家2001创建测试教派数据:');
                religion = await this.createTestReligionForPlayer2001();
                console.log('');
            }

            // 5. 检查所有教派信息
            console.log('5️⃣ 检查所有教派信息:');
            await this.checkAllReligions();
            console.log('');

            // 6. 总结
            console.log('📊 检查结果总结:');
            console.log(`   玩家2001存在: ${player ? '✅ 是' : '❌ 否'}`);
            console.log(`   玩家2001有教派信息: ${religion ? '✅ 是' : '❌ 否'}`);
            if (religion) {
                console.log(`   教派名称: ${religion.name}`);
                console.log(`   教派等级: ${religion.level}`);
            }

        } catch (error) {
            console.error('💥 检查过程中发生错误:', error.message);
        } finally {
            await this.disconnect();
        }
    }
}

// 运行检查
async function main() {
    const checker = new Player2001FactionChecker();
    await checker.runCheck();
}

// 如果直接运行此脚本
if (require.main === module) {
    main().catch((error) => {
        console.error('💥 脚本执行失败:', error.message);
        process.exit(1);
    });
}

module.exports = Player2001FactionChecker;
